import {usePmDictStore} from "@/stores";

export const PM_DICT_TYPE: Record<string, string> = {
  USER_TYPE: 'user_type',
  COMMON_STATUS: 'common_status',
  TERMINAL: 'terminal',
  PROHIBIT_UPLOAD_FILE_EXT: 'prohibit_upload_file_ext',
  FORM_BODY_TYPE: 'form_body_type',
  TEMPLATE_FILE: 'template_file',
  YES_OR_NO: 'yes_or_no',
  OPINION_LEVEL: 'opinion_level', // 意见反馈级别
  OPINION_STATUS: 'opinion_status', // 意见反馈箱状态
  SYSTEM_DICT: 'system_dict', // 系统字典

  // ========== SYSTEM 模块 ==========
  SYSTEM_USER_SEX: 'system_user_sex',
  SYSTEM_MENU_TYPE: 'system_menu_type',
  SYSTEM_ROLE_TYPE: 'system_role_type',
  SYSTEM_DATA_SCOPE: 'system_data_scope',
  SYSTEM_NOTICE_TYPE: 'system_notice_type',
  SYSTEM_OPERATE_TYPE: 'system_operate_type',
  SYSTEM_LOGIN_TYPE: 'system_login_type',
  SYSTEM_LOGIN_RESULT: 'system_login_result',
  SYSTEM_SMS_CHANNEL_CODE: 'system_sms_channel_code',
  SYSTEM_SMS_TEMPLATE_TYPE: 'system_sms_template_type',
  SYSTEM_SMS_SEND_STATUS: 'system_sms_send_status',
  SYSTEM_SMS_RECEIVE_STATUS: 'system_sms_receive_status',
  SYSTEM_ERROR_CODE_TYPE: 'system_error_code_type',
  SYSTEM_OAUTH2_GRANT_TYPE: 'system_oauth2_grant_type',
  SYSTEM_MAIL_SEND_STATUS: 'system_mail_send_status',
  SYSTEM_NOTIFY_TEMPLATE_TYPE: 'system_notify_template_type',
  USER_BELONG: 'user_belong',

  // ========== INFRA 模块 ==========
  INFRA_BOOLEAN_STRING: 'infra_boolean_string',
  INFRA_REDIS_TIMEOUT_TYPE: 'infra_redis_timeout_type',
  INFRA_JOB_STATUS: 'infra_job_status',
  INFRA_JOB_LOG_STATUS: 'infra_job_log_status',
  INFRA_API_ERROR_LOG_PROCESS_STATUS: 'infra_api_error_log_process_status',
  INFRA_CONFIG_TYPE: 'infra_config_type',
  INFRA_CODEGEN_TEMPLATE_TYPE: 'infra_codegen_template_type',
  INFRA_CODEGEN_FRONT_TYPE: 'infra_codegen_front_type',
  INFRA_CODEGEN_SCENE: 'infra_codegen_scene',
  INFRA_FILE_STORAGE: 'infra_file_storage',

  // ========== BPM 模块 ==========
  BPM_MODEL_CATEGORY: 'bpm_model_category',
  BPM_MODEL_FORM_TYPE: 'bpm_model_form_type',
  BPM_TASK_ASSIGN_RULE_TYPE: 'bpm_task_assign_rule_type',
  BPM_PROCESS_INSTANCE_STATUS: 'bpm_process_instance_status',
  BPM_PROCESS_INSTANCE_RESULT: 'bpm_process_instance_result',
  BPM_TASK_ASSIGN_SCRIPT: 'bpm_task_assign_script',
  BPM_OA_LEAVE_TYPE: 'bpm_oa_leave_type',
  PROJECT_PROCESS_STAGE: 'project_process_stage', // 项目阶段
  WORK_ITEM_STATUS: 'work_item_status', // 代办状态
  WORK_ITEM_TYPE: 'work_item_type', // 代办类型

  // ========== MP 模块 ==========
  MP_AUTO_REPLY_REQUEST_MATCH: 'mp_auto_reply_request_match', // 自动回复请求匹配类型
  MP_MESSAGE_TYPE: 'mp_message_type', // 消息类型

  // ========== PROJECT 模块 ==========
  PROJECT_TYPE: 'project_type', //项目类型
  PROJECT_STAGE: 'project_stage', //项目阶段
  CUSTOMER_TYPE: 'customer_type', //客户类型
  PROJECT_GRADE: 'project_grade', //项目级别
  CUSTOMER_SOURCE: 'customer_source', //客户来源

  // ========== 资源库 模块 ============
  CUSTOMER_LEVEL: 'customer_level', // 客户级别
  INDUSTRY_TYPE: 'industry_type',
  MANAGEMENT_LEVEL: 'management_level',
  CUSTOMER_AGE: 'customer_age', // 客户年龄段
  SPARE_BELONG_PLACE: 'spare_belong_place', // 备件归属地
  SPARE_DROP_LOCATION: 'spare_drop_location', // 备件放置位置
  GENERAL_ATTR_CATEGORY: 'general_attr_category', // 通用属性模块类别
  SPARE_TYPE: 'spare_type', // 备件类别
  INVENTORY_STATUS: 'inventory_status', // 库存状态
  SPARE_WAREHOUSE_RECORD_TYPE: 'spare_warehouse_record_type', // 备件记录类型
  SPARE_WAREHOUSE_OUT_TYPE: 'spare_warehouse_out_type', // 备件出库类别
  CUSTOMER_STATUS: 'customer_status', // 客户状态
  FIRM_STATUS: 'firm_status', // 品牌/厂商状态
  BUSINESS_SYNC_STATUS: 'business_sync_status', // 商务项目工作状态

  // ========== 基础表单 ===============
  RISK_PROBLEM_STAGE: 'riskProblemStage', // 风险问题阶段
  PURCHASE_APPLY_RECEIVER: 'purchase_apply_receiver', // 采购申请签收方
  PURCHASE_ITEM_TYPE: 'purchase_item_type', // 采购类型
  INVOICE_TYPE: 'invoice_type', // 发票类型
  PURCHASE_CONTRACT_TYPE: 'purchase_contract_type', // 是否合同内
  INVOICE_STAGE: 'invoice_stage', // 开票阶段
  INVOICE_RECEIPTS_SITUATION: 'invoice_receipts_situation', // 收票情况
  PROJECT_CHANGE_TYPE: 'change_type', // 项目变更类型
  INVOICE_PARTY: 'invoice_party', // 开票方
  PURCHASE_CONTRACT_APPLY_STATUS: 'purchase_contract_apply_status', // 采购申请状态
  PAYMENT_TYPE: 'payment_type', // 应付款类型

  // ========== 机会阶段 ===============
  FUND_POSITION_SITUATION: 'fund_position_situation',
  PROJECT_RESEARCH_DIFFICULTY: 'project_research_difficulty', // 项目调研难度

  // ========== 售前阶段 ===============
  TASK_TYPE: 'task_type', // 任务类型
  PROJECT_ATTRIBUTE: 'project_attribute', // 项目属性

  // ========== 交付阶段 ===============
  PAYMENT_MODE: 'payment_mode', // 支付方式
  EXPENSE_TYPE: 'expense_type', // 费用类型
  STAKEHOLDER_TYPE: 'stakeholder_type', // 干系人类型
  IMPL_TASK_IMPACT_NODES: 'impl_task_impact_nodes', // 项目实施任务影响节点
  IMPL_TASK_COMPLETION_STATUS: 'impl_task_completion_status', // 项目实施任务完成情况
  CONTRACT_STATUS: 'contract_status', // 合同状态
  DOC_LIST_TYPE: 'doc_list_type', // 文档清单创建类型
  PROJECT_MEMBER_TYPE: 'project_member_type', // 项目成员类型
  CONSTRUCTION_STAGE: 'construction_stage', // 施工阶段
  PRODUCT_DEVELOP_STATUS: 'product_develop_status', // 开发状态
  PRODUCT_TEST_STATUS: 'product_test_status', // 测试结论
  PRODUCT_DEPLOY_STATUS: 'product_deploy_status', // 部署结果

  // ========== 运维阶段 ===============
  SERVICE_TYPE: 'service_type', // 服务类型
  SERVICE_DOCUMENT_TYPE: 'document_type', // 文档类型
  WORK_RESULTS: 'work_results', // 工作结果
  REQUEST_PROBLEM_CLASSIFICATION: 'request_problem_classification', // 服务请求问题分类
  FAULT_WORK_ORDER: 'fault_work_order', // 故障工单
  REQUEST_WORK_ORDER: 'request_work_order', // 请求工单
  PLATFORM_CHANGE_WORK_ORDER: 'platform_change_work_order', // 平台变更工单
  TASK_WORK_ORDER: 'task_work_order', // 任务工单
  USAGE_OF_SPARE_PARTS: 'usage_of_spare_parts', // 备件使用方式
  CHANGE_CATEGORY: 'change_category', // 变更类别
  CHANGE_EQUIPMENT: 'change_equipment', // 变更设备
  CHANGE_METHOD: 'change_method', // 变更方式
  CONFIG_MGR_DEVICE_TYPE: 'config_mgr_device_type', // 运维配置管理设备类型
  CONFIGURATION_MGR_TIMELINESS: 'configuration_mgr_timeliness', // 运维配置管理时效要求
  DOCUMENT_CATEGORY: 'document_category',
  DOCUMENT_MAJOR_TYPE: 'document_major_type',
  DOCUMENT_SECRECY_LEVEL: 'document_secrecy_level',
  FUNCTIONALITY_GROUP_TYPE: 'functionality_group_type',
  DOCUMENT_SOURCE: 'document_source',

  // ========== 腾讯云 ===============
  TC_PROBLEM_TYPE: 'problem_type', // 问题分类
  TC_URGENCY_LEVEL: 'urgency_level', // 紧急程度
  TENCENT_CLOUD_PROJECT_NAME: 'tencent_cloud_project_name',
  TX_CONFIG_MGR_DEVICE_TYPE: 'tx_config_mgr_device_type', // 腾讯运维配置管理设备类型
  TX_CONFIGURATION_MGR_TIMELINESS: 'tx_configuration_mgr_timeliness', // 腾讯运维配置管理时效要求

}

/**
 * 获取 dictType 对应的数据字典数组
 *
 */
export function getDictDataList(dictType: string) {
  return usePmDictStore().dictData[dictType] || []
}

/**
 * 获取 dictType 对应的数据字典数组
 *
 */
export function getDictDataByList(dictType: string, values: string | number | Array<string | number>) {
  if (values === undefined) {
    return [];
  }
  // 如果是单个元素，则转换成数组
  if (!Array.isArray(values)) {
    values = [values];
  }
  // 获得字典数据
  const results: PmDict[] = [];
  for (const value of values) {
    const dict = getDictData(dictType, value);
    if (dict) {
      results.push(dict);
    }
  }
  return results;
}

export function getDictData(dictType: string, value: string | number) {
  // 获取 dictType 对应的数据字典数组
  const dictDataList = getDictDataList(dictType)
  if (!dictDataList || dictDataList.length === 0) {
    return ''
  }
  // 获取 value 对应的展示名
  value = value + '' // 强制转换成字符串，因为 DictData 小类数值，是字符串
  for (const dictData of dictDataList) {
    // 此处使用全等和form-boy使用数字字典相冲突，所以改成用恒等
    if (dictData.value == value) {
      return dictData;
    }
  }
  return undefined
}

export function getDictDataLabel(dictType: string, value: string | number) {
  const dict = getDictData(dictType, value);
  return dict ? dict.label : '';
}
